package diplooura;
import java.io.*;

public class Dequeue
{
private int numberElements;
private DNode head,rear;

	public Dequeue()
	{
	numberElements=0;
	head=new DNode(null,null,null);
	rear=new DNode(head,null,null);
	head.setNext(rear);	
	}
	public int getSize()
	{
	return numberElements;
	}
	public boolean isEmpty()
	{
	return (numberElements<1);
	}
	public DNode first()
	{
		if(isEmpty())
		{
		System.out.println("   ");
		return head;
		}
		else
		return head.getNext();
	}
	public DNode last()
	{
		if(isEmpty())
		{
		System.out.println("   ");
		return rear;
		}
		else
		return rear.getPrev();
	}
	public Item pop()
	{
		if(isEmpty())
		{
		System.out.println("   ");
		return null;
		}
		DNode first=head.getNext();
		DNode second=first.getNext();
		head.setNext(second);
		second.setPrev(head);
		first.setNext(null);
		first.setPrev(null);
		numberElements--;
		return first.getItem();
	}
	public void push(Item o)
	{
		DNode second=head.getNext();
		DNode first=new DNode(head,second,o);
		second.setPrev(first);
		head.setNext(first);
		numberElements++;
	}
	public Item eject()
	{
		if(isEmpty())
		{
		System.out.println("   ");
		return null;
		}
		DNode last=rear.getPrev();
		DNode secondToLast=last.getPrev();
		rear.setPrev(secondToLast);
		secondToLast.setNext(rear);
		last.setPrev(null);
		last.setNext(null);
		numberElements--;
		return last.getItem();
	}
	public void inject(Item o)
	{
		DNode secondToLast=rear.getPrev();
		DNode last=new DNode(secondToLast,rear,o);
		secondToLast.setNext(last);
		rear.setPrev(last);
		numberElements++;
	}
	public void print()
	{
		DNode curr=head.getNext();
		
		while(curr!=rear)
		{
		System.out.print(curr.getItem().getKey()+" ");
		curr=curr.getNext();
		}
	}
}
